﻿using System;
using System.Text.RegularExpressions;
using System.Web.Security;
using System.Web.UI;
using Meotom.Upload.v2.Data.BLL;
using Meotom.Upload.v2.Data.Utilities;

namespace Meotom.Upload.v2.Account
{
    public partial class FrmRegister : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack) { return; }
            Common.Instance.SetSession("CaptchaImageText",
                                                      CaptchaImage.GenerateRandomCode(CaptchaType.AlphaNumeric, 4));
        }

        protected void RegisterButton_OnClick(object sender, EventArgs e)
        {
            if (Session["CaptchaImageText"] != null &&
                txtCode.Text.ToLower() == Session["CaptchaImageText"].ToString().ToLower())
            {
                var strTemp = ValidateRegister(txtUserName.Text, txtPassword.Text, txtEmail.Text);
                if (strTemp == "OK")
                {
                    lblError.InnerHtml = "";

                    var member = Membership.CreateUser(txtUserName.Text, txtPassword.Text, txtEmail.Text);
                    Roles.AddUserToRole(member.UserName, "Members");

                    var profile = WProfile.GetProfile(member.UserName);
                    profile.UserInfo.IsLostPass = false;
                    profile.Save();

                    FormsAuthentication.SetAuthCookie(member.UserName, true);
                    //using (var reader = new StreamReader(Configs.FolderSaveData + @"\template\NewMember.htm",Encoding.UTF8))
                    //{
                    //    var strTemp1 = reader.ReadToEnd();
                    //    strTemp1 = strTemp1.Replace("{0}", txtUserName.Text);

                    //    using (var mailer = new mailer.MeoTom_Services())
                    //    {
                    //        mailer.SendMail(txtEmail.Text, "[Up.Meotom.Net] - Cam on ban da dang ky tai khoan", strTemp1, "");
                    //    }
                    //}

                    ScriptManager.RegisterStartupScript(this, GetType(), "key", "window.parent.location.href='/';",
                                                        true);
                }
                else
                {
                    lblError.InnerHtml = strTemp;
                }
            }
            else
            {
                lblError.InnerHtml = "* Mã xác nhận không đúng !!!";
            }
        }

        public string ValidateRegister(string userName, string password, string email)
        {
            var regUser = new Regex("^[A-Za-z0-9]*$");
            var regEmail =
                new Regex(
                    @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
            if (userName.Trim().Length < 3)
            {
                return "* Xin vui lòng nhập tên đăng nhập.<br/>Tên đăng nhập phải lớn hơn 3 ký tự, chỉ bao gồm các ký tự từ A-Z 0-9.";
            }
            if (!regUser.IsMatch(userName.Trim()))
            {
                return "* Tên đăng nhập phải lớn hơn 3 ký tự, chỉ bao gồm các ký tự từ A-Z 0-9";
            }
            if (userName.Trim().Length > 30)
            {
                return "* Tên đăng nhập quá dài.";
            }
            if (email.Trim().Length < 1)
            {
                return "* Xin vui lòng nhập Email.";
            }
            if (email.Trim().Length > 50)
            {
                return "* Email quá dài.";
            }
            if (!regEmail.IsMatch(email.Trim()))
            {
                return "* Email sai định dạng.";
            }
            if (password.Trim().Length < 6)
            {
                return "* Xin vui lòng nhập mật khẩu.";
            }
            if (CheckEmailAvaiable(email) != "OK")
            {
                return "* Email của bạn đã tồn tại trong hệ thống.";
            }
            if (CheckUserAvaiable(userName) != "OK")
            {
                return "* Xin vui lòng xem lại tên đăng nhập.";
            }
            return "OK";
        }

        public static string CheckUserAvaiable(string userName)
        {
            string strReturn;
            var reg = new Regex("^[A-Za-z0-9]*$");
            if (userName == "")
            {
                strReturn = "Bad";
            }
            else if (!reg.IsMatch(userName))
            {
                strReturn = "MatchFail";
            }
            else if (userName.Length > 30)
            {
                strReturn = "TooLong";
            }
            else
            {
                strReturn = Membership.FindUsersByName(userName).Count != 0 ? "Fail" : "OK";
            }
            return strReturn;
        }

        public static string CheckEmailAvaiable(string email)
        {
            return Membership.FindUsersByEmail(email).Count != 0 ? "Fail" : "OK";
        }
    }
}